home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 45 / Amiga Format CD45 (1999-09)(Future Publishing)(GB)(Track 1 of 2)[!][issue 1999-11].iso / -serious- / misc / mcread / original / mbinary.c < prev    next >
C/C++ Source or Header  |  1999-08-09  |  1KB  |  53 lines

  1. /*    mcread: mbinary.c
  2.     Copyright (C) 1991, Mike Gleason Jr & NCEMRSoft.
  3.     All Rights Reserved. */
  4.  
  5. #include <stdio.h>
  6. #include "mcread.h"
  7.  
  8.  
  9. long CheckMBHeader(in, filetypestr)
  10.     FILE *in;
  11.     char *filetypestr;
  12.     
  13.     /*    See if this file is in MacBinary II format, and if it is, get
  14.         some information about the file.  Either way, after calling
  15.         this routine the file pointer will be at the start of the
  16.         data fork.    It returns the total number of bytes in the
  17.         data fork, or 0 if a mbh was not detected. */
  18.         
  19. {
  20.     register long     dataforklen;    
  21.     register short    zero;
  22.     
  23.     *filetypestr = '\0';
  24.     
  25.     zero = getc(in);
  26.     if (zero != '\0') goto fail;
  27.     
  28.     if (fseek(in, (long) 74, SEEK_SET)) goto fail;
  29.     zero = getc(in);
  30.     if (zero != '\0') goto fail;
  31.     
  32.     if (fseek(in, (long) 83, SEEK_SET)) goto fail;
  33.     zero = getc(in);
  34.     if (zero != '\0') goto fail;
  35.     
  36.     /* if we got this far, its gotta be macbinary. */
  37.         
  38.     if (fseek(in, (long) 83, SEEK_SET)) goto fail;
  39.     dataforklen = (long) Getl(in);
  40.     
  41.     if (fseek(in, (long) 65, SEEK_SET)) goto fail;
  42.     (void) fgets(filetypestr, 8, in);
  43.     filetypestr[4] = '\0';
  44.     
  45.     (void) fseek(in, (long) 128, SEEK_SET);
  46.     return (dataforklen);    /* We made it! */
  47.  
  48. fail:
  49.     (void) fseek(in, (long) 0, SEEK_SET);
  50.     return ((long) -1);
  51. }    /* CheckMBHeader */
  52.  
  53. /* eof */